/**列布局 插件 column.js
作者：		三牙西瓜
email：		felixzxk@163.com

参数说明：
【equally】
整数，选填，默认1，将row-block元素的每行等分为若干个单元；
【margin】
整数，选填，默认0，每个rb-item元素的间距；
【unit_w】		
整数数组，选填，对应每个rb-item元素在每行中的宽度占比，默认是1单元，原则上是有多少个rb-item元素就配多少个值，也可以局部配置，但是只能从首个rb-item元素开始逐个配值；
----------------------------
版本：		v0.1
更新时间：	2015年1月4日
该插件主要实现$(".row-block")元素内，多个子元素$(".rb-item")浮动顺序排列的布局，子元素宽度通过参数unit_w数组的对应值（默认是1单位）来定义，配合device_w()方法实现响应式定义列元素宽度；
需要在页面初始化时运行一次，在页面resize的时候持续运行；
----------------------------
版本：		v0.2
更新时间：	2015年3月25日
调整判断方法，优化代码；
添加对浏览设备的判断，并对pc浏览器做了定宽处理，移动设备可根据既定宽度定义column元素的宽度；同时更新了device_w.js文件
----------------------------
版本：		v0.3
更新时间：	2015年12月12日
对参数数据类型进行检测并在参数类型不对时抛出详细类型错误信息
----------------------------
*/
(function ($) {
    $.fn.extend({
        "column": function (options) {
            var opts = $.extend({}, defaluts, options); 
			var wrap = $(this).children(".rbWrap");
			var item = wrap.children(".rbItem");
			var item_size = item.size();
			var equally = opts.equally;//单行等分数量
			var margin = opts.margin;//元素的间距（px）
			var unit_w = opts.unit_w;
			
			if(typeof equally != "number"){
				throw "参数equally，需要使用number类型的数据"
			}else if(typeof margin != "number"){
				throw "参数margin，需要使用number类型的数据"
			}else if(!(unit_w instanceof Array)){
				throw "参数unit_w，需要使用array类型的数据"
			}else{
				for(var ai = 0,al = unit_w.length;ai < al; ai++){
					if(typeof unit_w[ai] != "number"){
						throw "unit_w数组中的元素数据类型必须是整数"	
					}
				}
			};
			//每个元素的依次宽度占比（单元个数）
			item.css("position","relative")
			$.fn.item_info = function(n){//实际的索引值会计算上后来添加的columnAdd的清除元素，所以在获取索引值时需要把当前元素之前的所有columnAdd元素的数量值从索引数值中减去：
				var index = parseInt($(this).index())-parseInt($(this).prevAll(".columnAdd").size());
				var proportion = unit_w[index];//如果proportion有值，那么就取该值，否则proportion的值为“1”，以防在填入参数时忘记写该列的占比，或者直接希望等分所有列；
				if(typeof proportion != "number"){
					//alert(typeof proportion);
					proportion = 1
				};
				var wrap_w = wrap.width();
				//单个rbItem的宽度计算
				var this_w;
				if(equally > 1){
					this_w = Math.floor((wrap_w - (equally - 1) * margin) * ( proportion / equally )+((proportion-1)*margin));
				}else{
					this_w = wrap_w
				};
				if(n == "w"){
					return this_w
				}else if( n == "i") {
					return parseInt(proportion);
				}
			};
			column_define = function(){
				var c_index = 0;
				item.css({
					"float" : "left",
					"margin-right" : margin+"px",
					"margin-bottom": margin + "px"
				}).each(function(){
					$(this).width($(this).item_info("w"));
					c_index += $(this).item_info("i");
					if (c_index >= equally || $(this).nextAll().size() <1){
						$(this).css("margin-right",0);
						if(!$(this).next().hasClass("columnAdd")){
							$(this).after("<div class='clear columnAdd'></div>");
						};
						c_index = 0;
					}
				})
			};
			column_define()
		}
    });
	var defaluts = {
		equally: 1,		//默认单列
		margin: 0,		//默认无间距
		unit_w: [1]		//默认每列都是1单位的宽度占比
	}; 
})(window.jQuery);